package Z.dailyExercise.holiday;

public class _367_有效的完全平方数 {
    public static void main(String[] args) {
        _367_有效的完全平方数 test = new _367_有效的完全平方数();
        System.out.println(test.isPerfectSquare(808201));
    }
    /**
     * 自解：判断是否完全平方数就是寻找一个数 其平方是否为target
     * 因为大于2的任何数的平方根小于其一班 所以high可以直接指定为target/2
     * @param num
     * @return
     */
    public boolean isPerfectSquare(int num) {

        if (num==1){
            return true;
        }

        if (helper(num,0,num/2)== -1){
            return false;
        }else {
            return true;
        }
    }

    public int helper(int num,long low,long high){

        if (low>high){
            return -1;
        }

        long mid = low+(high-low)/2;
        long res = mid *mid;
        if (res < num){
            return  helper(num,mid+1,high);
        }else if (res > num){
            return helper(num,low,mid-1);
        }else {
            return (int) mid;
        }

    }
}
